package com.zjj.algorithm.learning.leetcode.queue;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author zjj_admin
 * @date 2022/12/21 10:27
 */
public class MyQueue {

    Deque<Integer> queue = new LinkedList<>();

    /**
     * 队列弹出数据
     * 弹出元素时，比较当前要弹出的数值是否等于队列出口的数值，如果相等则弹出
     *
     * @param val
     * @return
     */
    public void poll(int val) {
        if (!this.queue.isEmpty() && val >= this.queue.peek()) {
            this.queue.poll();
        }
    }

    /**
     * 向队列中添加一条数据
     * 当当前的数据大于队头的数据时，需要将队头的数据移除
     *
     * @param val
     */
    public void add(int val) {
        while (!this.queue.isEmpty() && val > this.queue.getLast()) {
            this.queue.removeLast();
        }
        this.queue.add(val);
    }

    /**
     * 获取队列的对顶的元素，队顶元素始终为最大值
     *
     * @return
     */
    public Integer peek() {
        if (!this.queue.isEmpty()) {
            return this.queue.peek();
        }
        return null;
    }
}
